package com.dareway.jvm;

public class gc_roots {

    private static Test a;

    public static void main(String[] args) throws InterruptedException {
        a = new Test();

        //这里直接把a赋值为null，这样前面的对象我们不可能再得到了
        a = null;

        //手动申请执行垃圾回收操作（注意只是申请，并不一定会执行，但是一般情况下都会执行）
        System.gc();

        //等垃圾回收一下()
        Thread.sleep(1000);

        //我们来看看a有没有被回收
        System.out.println(a);
    }

    private static class Test {
//        那么子类对象在被判定为可回收时，会进行二次确认，也就是执行finalize()方法
        @Override
        protected void finalize() throws Throwable {
            System.out.println(this + " 开始了它的救赎之路！");
            a = this;
        }

    }
}
